1. cmmdc(a,b)
#include<iostream.h>
#include<math.h>

int cmmdc(int a,int b)
{
if( a==b) return a;
else
if (a>b) return cmmdc(a-b,b);
else return cmmdc(a,b-a);
}
int main()
{ int a=18,b=6;
clrscr();
cout<<cmmdc(a,b);
return 0;
}
.
sa se verifice daca un numar este prim
#include<iostream.h>
#include<math.h>

int prim(int n,int d)
{
if (n<2) return 0;
else
{if(n==2) return 1;
else if (d>=sqrt(n)) return 1;
else if(n%d==0) return 0;
else return prim(n,d+1);
} }

int main()
{ int n=1,d=2;
clrscr();
if( prim(n,d)) cout<<"da";
else cout<<"nu";
return 0;

}
Descompunerea in factori primi
void descompfp(int n, int fact, int p)
descompunere in factori primi
{ if(n>1)
{
if (n%fact==0){++p; descompfp(n/fact,fact,p);}
else
{ if(p!=0) {cout<<"fact="<<fact<<" e la puterea="<<p<<endl;}
descompfp(n,fact+1,0);
}
}
else if(p!=0) {cout<<"fact="<<fact<<" e la puterea="<<p<<endl;} pentru ultimul divizor
}
apel descompfp(n,2,0)
cifra minima
#include<iostream.h>
#include<math.h>
int f(long n)
{ int c;
if(n==0) return 9;
else {
c=f(n/10);
if(n%10<c) return n%10;
else return c;
} }
int main()
{ long n=23159;
clrscr();
cout<<f(n);
return 0;
}
suma a n numere
#include<iostream.h>
#include<math.h>
long suma(int n)
{ int x;
if(n==0) return 0;
else
{ cin>>x;
return suma(n-1)+x;
} }
int main()
{ int n=3;
clrscr();
cout<<suma(n);
return 0;
}




suma elementelor unui vector
#include<iostream.h>
#include<math.h>

long suma(int n,int x[])
{
if (n==0) return 0;
else
{
return suma(n-1,x)+x[n];
} }
int main()
{ int i,n,x[10];
clrscr();
cin>>n;
for(i=1;i<=n;i++) cin>>x[i];
cout<<suma(n,x);
return 0;
}
suma elementelor unui vector
#include<iostream.h>
#include<math.h>

void suma(int n,int x[], long &s)
{
if (n==0) s=0;
else
{
suma(n-1,x,s);
s=s+x[n];
} }
int main()
{ int i,n,x[10];long s;
clrscr();
cin>>n;
for(i=1;i<=n;i++) cin>>x[i];
suma(n,x,s);
cout<<s;
return 0;
}
Sa se construiasca un vector cu suma elementelor de pe fiecare linie dintr-o matrice.
#include <fstream>

using namespace std;
fstream f("mat.in",ios::in);
fstream g("mat.out",ios::out);
int a[10][10],v[10],n;
void citire(int a[][10],int n)
{ int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];

}
void suma(int a[][10],int n,int i, int v[])
{ int j;
if(i<=n) { v[i]=0;
for(j=1;j<=n;j++) v[i]+=a[i][j];
suma(a,n,i+1,v);
}
}
void afisare(int v[],int i)
{
if(i<=n)
{ g<<v[i]<<" ";
afisare(v,i+1);
}
}
int main()
{
f>>n;
citire(a,n);
suma(a,n,1, v);
afisare(v,1);
f.close();
g.close();
return 0;
}
Fibonacci

long fibo(int n)
{ if(n<=2) return n;
else return fibo(n-1)+fibo(n-2);
}
Observatie: se recomanda utilizarea unui algoritm iterativ .
Urmariti ce se intimpla la apelarea functiei fibo(7) in imaginea de mai jos.
Se apeleaza functia de mai multe ori pentru aceeasi valoare, n?


Alte exemple
Suma elementelor pare din matrice
int calcul(int i)
{ int j,s=0;
if(i<=n)
{ for(j=1;j<=n;j++)//
if (a[i][j]%2==0) s=s+a[i][j];
return s+calcul(i+1);
}
else return 0;
}

int calcul2(int i, int j)
{
if(i<=n)
{ if(j<=n)
{if(a[i][j]%2==0) return a[i][j]+calcul2(i,j+1);
else return calcul2(i,j+1);

}
else return calcul2(i+1,1);
}
else return 0;
}

Recursivitate în cascadă (anumite valori se calculează de mai multe ori ).

Se recomandă utilizarea unui algoritm iterativ.

fibo.png